package com.itkeien.streamprogramproject.testLambda;

import java.util.List;

public class keLiHua {

//    @FunctionalInterface
//    public interface func {
//        public int op(int a, int b);
//    }

    @FunctionalInterface
    public interface funa {
        funb op(int a);

    }

    @FunctionalInterface
    public interface funb {
        public int op(int b);
    }



    //函数式编程
    @FunctionalInterface
    public interface func1 {
        func2  op(List a);

    }

    @FunctionalInterface
    public interface func2 {
         func3 op(List b);

    }

    @FunctionalInterface
    public interface func3 {
        public List op(List c);
    }




    public static void main(String[] args) {

//        func func = (a, b) -> a + b;
//
//        //我也不懂这是啥玩意
        funa func = (a) -> (b) -> a + b;
//        System.out.println(funa.op(1).op(2));

        //匿名内部类实现方式
//        funa func1 = new funa() {
//            @Override
//            public funb op(int a) {
//                return new funb() {
//                    @Override
//                    public int op(int b) {
//                        return a + b;
//                    }
//                };
//            }
//        };
//
//        funb op = func1.op(1);
//        System.out.println(op.op(2));


        List l1 = List.of(1,2,3);


        List l2 = List.of(4,5,6);

        List l3 = List.of(7,8,9);

        func1 func1 = new func1() {
            @Override
            public func2 op(List a) {
                return new func2() {
                    @Override
                    public func3 op(List b) {
                        return new func3() {

                            @Override
                            public List op(List c) {
                               return List.of(a,b,c);
                            }
                        };
                    }
                };
            }
        };

        //利用lambda+闭包实现;
        func1 func2 = (a)-> (b)->(c)-> List.of(a,b,c);

        List op = func1.op(l1).op(l2).op(l3);
        System.out.println(op);
        List op1 = func2.op(l1).op(l2).op(l3);
        System.out.println(op1);


    }
}
